op {
  graph_op_name: "RngReadAndSkip"
  visibility: HIDDEN
  in_arg {
    name: "resource"
    description: <<END
The handle of the resource variable that stores the state of the RNG. The state consists of the counter followed by the key.
END
  }
  in_arg {
    name: "alg"
    description: <<END
The RNG algorithm.
END
  }
  in_arg {
    name: "delta"
    description: <<END
The amount of advancement.
END
  }
  out_arg {
    name: "value"
    description: <<END
The old value of the resource variable, before incrementing. Since state size is algorithm-dependent, this output will be right-padded with zeros to reach shape int64[3] (the current maximal state size among algorithms).
END
  }
  summary: "Advance the counter of a counter-based RNG."
  description: <<END
The state of the RNG after
`rng_read_and_skip(n)` will be the same as that after `uniform([n])`
(or any other distribution). The actual increment added to the
counter is an unspecified implementation choice.

In the case that the input algorithm is RNG_ALG_AUTO_SELECT, the counter in the state needs to be of size int64[2], the current maximal counter size among algorithms. In this case, this op will manage the counter as if it is an 128-bit integer with layout [lower_64bits, higher_64bits]. If an algorithm needs less than 128 bits for the counter, it should use the left portion of the int64[2]. In this way, the int64[2] is compatible with all current RNG algorithms (Philox, ThreeFry and xla::RandomAlgorithm::RNG_DEFAULT). Downstream RNG ops can thus use this counter with any RNG algorithm.
END
}
